package one_jichu;

public class EqualsAndDengHao {
    public static void main(String[] args) {
        // 在String池中创建“abc",然后在栈中创建s_1并指向"abc"
        String s_1 = "abc";
        // 再创建一个
        String s_2 = "abc";
        // 按理说现在1和2都指向一个地方，所以==是true，而且equals也是true
        System.out.println(s_1 == s_2);
        System.out.println(s_1.equals(s_2));

        System.out.println("**********************");

        // 再创建一个，直接new，结果应该是直接在堆中创建，所以不一样
        String s_3 = new String("abc");
        // 应该是一个f一个t
        System.out.println(s_1 == s_3);
        System.out.println(s_1.equals(s_3));

        System.out.println("**********************");
        String s_4 = "abcd";
        s_1 = s_1 + "d";
        s_2 = "abcd";
        // 现在1加了个d，2指向了abcd，按理说都是在String池中，应该都一样
        System.out.println(s_1 == s_4);
        System.out.println(s_1.equals(s_4));
        System.out.println("**********************");
        // 这里的4是在String里新创建的，1是加了个d，但是是在堆里新创建的，类似与new了一下，所以1和4的==结果为false
        // 这里的2应该和4也是不一样的，因为一个在堆，一个在String池,cuole,这里是true
        System.out.println(s_1 == s_2);
        System.out.println(s_1.equals(s_2));
        System.out.println("**********************");
        System.out.println(s_4 == s_2);
        System.out.println(s_4.equals(s_2));

        String str4 = "a" + "b";
        System.out.println(str4 == "ab");

        final String s = "b";
        String str5 = s + "a";
        System.out.println(str5 == "ba");
        System.out.println("**********************");
//        final String str1 = "d";
//        String str2 = "d";
//        str1 += "a";
//        str2 += "a";
        System.out.println("%%%%%%%");
        String ss = "s";
        String sss = "ss";
        ss += "s";//类似与new了一下
        System.out.println(ss == sss);
        String ssss = "ssss" + "ssss";
        System.out.println(ssss == "ssss");//false
        String str_4 = "a" + "b";
        System.out.println(str4 == "ab");//true
    }
}
